A storage server is a computer that provides access to information that is stored on one or more storage devices connected to the storage server, such as disk drives (“disks”), flash memories, or storage arrays. The storage sever includes an operating system that may implement a storage abstraction layer to logically organize the information as storage objects on the storage devices. With certain logical organizations, the storage abstraction layer may involve a file system which organizaes information as a hierarchical structure of directories and files. Each file may be implemented as set of data structures, e.g., disk blocks, configured to store information, such as the actual data for the file. The file system typically organizes such data blocks as a logical “volume”, where each volume may be associated with its own file system and may further be organized into logical sub-volumes referred to as qtrees. Each directory, file, qtree, and volume may constitute a storage object. In other logical organizations, a file system may constitute a storage object with the storage abstraction layer managing multiple file systems.
The storage server may be configured to operate according to a client/server model of information delivery to allow one or more clients access to data stored on the storage server. In this model, the client may comprise an application executing on a computer that “connects” to the storage server over a computer network, such as a point-to-point link, shared local area network, wide area network or virtual private network implemented over a public network, such as the Internet. A client may access the storage devices by submitting access requests to the storage server, for example, a “write” request to store client data included in a request to storage devices or a “read” request to retrieve client data stored in the storage devices.
Multiple storage servers may be networked or otherwise connected together as a network storage system to protect against a failure of one or more of the storage servers which would otherwise leave data of the failed storage server inaccessible. To accomplish this, data of a protected storage server (primary storage server) may be replicated to another storage server (secondary storage server) to ensure continued access to client data in the event the primary storage server fails. Data replication may involve backups, such as a read-only, point-in-time images of data referred to as “snapshots”, or mirrors (e.g., actual copies) of data. Upon a failure, the secondary storage server may operate to provide continued access to client data using the replicated data. The primary and secondary storage servers are in this way configured to implement a “protection relationship.”
The primary storage server typically services storage requests on one or more storage objects such as volumes, qtrees, or snapshots, in which each may be protected by the same or different secondary storage server as another storage object. To manage the relationships between storage objects in the network storage system, protection relationship information may be stored in a registry file of a file system at the primary storage server. Protection relationship information may include storage object settings such as a storage object type (e.g., volume, qtree, snapshot), a type of replication performed between storage objects (e.g., backup, mirror), and the frequency of replication (e.g., minutes, hours, days), for example. When a primary storage object fails, information in the registry file may be used to reconstruct the primary storage object from, and reinstate the protection relationship with, a secondary storage object. Since a secondary storage object already references a primary storage object having certain storage object settings, reconstructing the primary storage object in accordance with such settings efficiently reinstates the protection relationship between the reconstructed storage object and the secondary storage object without substantial reconfiguration of the secondary storage object.
One deficiency with the present approach, however, is the reliance on the availability and accessibility of the registry file at the primary storage server. In certain albeit unusual cases, a loss of or failure with the registry file may occur during the transfer of replicated data, a failure of the storage server, or an accidental deletion of the registry file by an administrator, resulting in the loss of protection relationship information stored therein. To recover from such a loss, a copy of the registry file may be stored in a second location of the primary storage server such as the root file system, which may be accessed during a manual or scripted restore of the file system. However, availability of such a copy remains deficient in instances where the primary storage server fails entirely.
One conventional technique for ensuring continued access to information provided by the registry file involves the administrator maintaining a physical record of storage object settings. However, in addition to the burdens of maintaining a physical record, the administrator must also possess detailed knowledge and/or specialized skills to reconstruct a failed storage object using information documented in the physical record. In certain cases, the administrator may encode storage object settings in attributes of the storage objects to avoid the need for a separate physical record. However, such encoding is typically performed at the discretion of the administrator which would still require specialized knowledge by the administrator to decipher the encoded information for extracting the relevant information.